package ar.edu.utn.frsf.tpae.a2012.g01.model;

import java.util.Date;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 * Representa las cuentas
 * 
 * @author HP
 *
 */
@Entity
@Table(name = "cta")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Cuenta {
	@Id
	@Column(name = "cta_id")
	@SequenceGenerator(name = "SecuenciaCuenta", sequenceName = "seq_cta", allocationSize = 1)
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SecuenciaCuenta")
	private int id;
	@Column(name = "cta_nro", unique = true)
	private long numero;
	@Column(name = "cta_fech_ape")
	private Date fechaApertura;
	@Column(name = "cta_sdo_act")
	private double saldoActual;
	@OneToMany(mappedBy = "cuenta")
	private List<Movimiento> movimientos;
	@ManyToOne
	@JoinColumn(name = "cta_cli_id")
	private Cliente cuentaCliente;

	/**
	 * Constructor
	 * 
	 * @param numero
	 * @param cuentaCliente
	 * @param fechaApertura
	 * @param saldoActual
	 */
	public Cuenta(long numero, Cliente cuentaCliente, Date fechaApertura,
			double saldoActual) {
		this.numero = numero;
		this.cuentaCliente = cuentaCliente;
		this.fechaApertura = fechaApertura;
		this.saldoActual = saldoActual;
		id= 0;
	}

	/**
	 * Constructor por defecto
	 * 
	 */
	public Cuenta() {
		id= 0;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public long getNumero() {
		return numero;
	}

	public void setNumero(long numero) {
		this.numero = numero;
	}

	public Cliente getCuentaCliente() {
		return cuentaCliente;
	}

	public void setCuentaCliente(Cliente cuentaCliente) {
		this.cuentaCliente = cuentaCliente;
	}

	public Date getFechaApertura() {
		return fechaApertura;
	}

	public void setFechaApertura(Date fechaApertura) {
		this.fechaApertura = fechaApertura;
	}

	public double getSaldoActual() {
		return saldoActual;
	}

	public void setSaldoActual(double saldoActual) {
		this.saldoActual = saldoActual;
	}


	 public List<Movimiento> getMovimientos() {
	 return movimientos;
	 }
	
	 public void setMovimientos(List<Movimiento> movimientos) {
	 this.movimientos = movimientos;
	 }

}
